🎖️GitЯра🎖️
Node / meshtastic / Meshtastic-Android / files / androidApp / src / testGoogle / kotlin / org / meshtastic / app / ai / appfunctions / MeshtasticAppFunctionsTest.kt
Displaying Raw • Download
androidApp/src/testGoogle/kotlin/org/meshtastic/app/ai/appfunctions/MeshtasticAppFunctionsTest.kt 2d20cd8a4708e2ef66e98d5259f3a97ec93f240a (2d20cd8a) Text, 11.16 KB
T8b949e/*
* Copyright (c) 2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tff7b72package T7ee787org.meshtastic.app.ai.appfunctions
Tff7b72import T7ee787androidx.appfunctions.AppFunctionContext
Tff7b72import T7ee787androidx.appfunctions.AppFunctionElementNotFoundException
Tff7b72import T7ee787androidx.appfunctions.AppFunctionInvalidArgumentException
Tff7b72import T7ee787androidx.appfunctions.AppFunctionNotSupportedException
Tff7b72import T7ee787dev.mokkery.MockMode
Tff7b72import T7ee787dev.mokkery.answering.returns
Tff7b72import T7ee787dev.mokkery.everySuspend
Tff7b72import T7ee787dev.mokkery.mock
Tff7b72import T7ee787kotlinx.coroutines.test.runTest
Tff7b72import T7ee787org.junit.runner.RunWith
Tff7b72import T7ee787org.meshtastic.core.data.ai.AiFunctionProvider
Tff7b72import T7ee787org.meshtastic.core.data.ai.ChannelSummary
Tff7b72import T7ee787org.meshtastic.core.data.ai.ContactUnread
Tff7b72import T7ee787org.meshtastic.core.data.ai.DeviceStatus
Tff7b72import T7ee787org.meshtastic.core.data.ai.GetChannelInfoResult
Tff7b72import T7ee787org.meshtastic.core.data.ai.GetDeviceStatusResult
Tff7b72import T7ee787org.meshtastic.core.data.ai.GetMeshMetricsResult
Tff7b72import T7ee787org.meshtastic.core.data.ai.GetNodeDetailsResult
Tff7b72import T7ee787org.meshtastic.core.data.ai.GetNodeListResult
Tff7b72import T7ee787org.meshtastic.core.data.ai.GetRecentMessagesResult
Tff7b72import T7ee787org.meshtastic.core.data.ai.GetUnreadSummaryResult
Tff7b72import T7ee787org.meshtastic.core.data.ai.MeshMetrics
Tff7b72import T7ee787org.meshtastic.core.data.ai.MeshStatusResult
Tff7b72import T7ee787org.meshtastic.core.data.ai.MessageSummary
Tff7b72import T7ee787org.meshtastic.core.data.ai.NodeDetails
Tff7b72import T7ee787org.meshtastic.core.data.ai.NodeSummary
Tff7b72import T7ee787org.meshtastic.core.data.ai.SendMessageResult
Tff7b72import T7ee787org.meshtastic.core.data.ai.UnreadSummary
Tff7b72import T7ee787org.robolectric.RobolectricTestRunner
Tff7b72import T7ee787org.robolectric.annotation.Config
Tff7b72import T7ee787kotlin.test.Test
Tff7b72import T7ee787kotlin.test.assertEquals
Tff7b72import T7ee787kotlin.test.assertFailsWith
Tff7b72import T7ee787kotlin.test.assertTrue
Tf0883e@RunWithTb4b4b4(Te6edf3RobolectricTestRunnerTff7b72::Te6edf3classTb4b4b4)
Tf0883e@ConfigTb4b4b4(Te6edf3sdk Tff7b72= Tff7b72[T79c0ff3T79c0ff5Tff7b72]Tb4b4b4, Te6edf3application Tff7b72= Te6edf3androidTb4b4b4.Te6edf3appTb4b4b4.Te6edf3ApplicationTff7b72::Te6edf3classTb4b4b4)
Tff7b72class T56d364MeshtasticAppFunctionsTest Tb4b4b4{
Tff7b72private Tff7b72val Te6edf3providerTb4b4b4: Te6edf3AiFunctionProvider Tff7b72= Te6edf3mockTb4b4b4(Te6edf3MockModeTb4b4b4.Te6edf3autofillTb4b4b4)
Tff7b72private Tff7b72val Te6edf3contextTb4b4b4: Te6edf3AppFunctionContext Tff7b72= Te6edf3mockTb4b4b4(Te6edf3MockModeTb4b4b4.Te6edf3autofillTb4b4b4)
Tff7b72private Tff7b72val Te6edf3appFunctions Tff7b72= Te6edf3MeshtasticAppFunctionsTb4b4b4(Te6edf3providerTb4b4b4)
Tf0883e@Test
Tff7b72fun Td2a8ffsendMessage_successTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Te6edf3everySuspend Tb4b4b4{ Te6edf3providerTb4b4b4.Te6edf3sendMessageTb4b4b4(Ta5d6ff"Ta5d6ffHelloTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffAliceTa5d6ff"Tb4b4b4, Tff7b72nullTb4b4b4) Tb4b4b4} Te6edf3returns
Te6edf3SendMessageResultTb4b4b4.Te6edf3SuccessTb4b4b4(Te6edf3messageId Tff7b72= T79c0ff1T79c0ff2T79c0ff3T79c0ff4Tb4b4b4, Te6edf3channel Tff7b72= Ta5d6ff"Ta5d6ffPrimaryTa5d6ff"Tb4b4b4, Te6edf3timestamp Tff7b72= T79c0ff1T79c0ff7T79c0ff0T79c0ff0T79c0ff0T79c0ff0T79c0ff0T79c0ff0T79c0ff0T79c0ff0LTb4b4b4)
Tff7b72val Te6edf3response Tff7b72= Te6edf3appFunctionsTb4b4b4.Te6edf3sendMessageTb4b4b4(Te6edf3contextTb4b4b4, Ta5d6ff"Ta5d6ffHelloTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffAliceTa5d6ff"Tb4b4b4, Tff7b72nullTb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff1T79c0ff2T79c0ff3T79c0ff4Tb4b4b4, Te6edf3responseTb4b4b4.Te6edf3messageIdTb4b4b4)
Te6edf3assertEqualsTb4b4b4(Ta5d6ff"Ta5d6ffPrimaryTa5d6ff"Tb4b4b4, Te6edf3responseTb4b4b4.Te6edf3channelTb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff1T79c0ff7T79c0ff0T79c0ff0T79c0ff0T79c0ff0T79c0ff0T79c0ff0T79c0ff0T79c0ff0LTb4b4b4, Te6edf3responseTb4b4b4.Te6edf3timestampTb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ffsendMessage_ambiguousNameTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Te6edf3everySuspend Tb4b4b4{ Te6edf3providerTb4b4b4.Te6edf3sendMessageTb4b4b4(Ta5d6ff"Ta5d6ffHelloTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffAlTa5d6ff"Tb4b4b4, Tff7b72nullTb4b4b4) Tb4b4b4} Te6edf3returns
Te6edf3SendMessageResultTb4b4b4.Te6edf3AmbiguousNameTb4b4b4(Te6edf3listOfTb4b4b4(Ta5d6ff"Ta5d6ffAliceTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffAlbertTa5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3exception Tff7b72=
Te6edf3assertFailsWithTff7b72<Te6edf3AppFunctionInvalidArgumentExceptionTff7b72> Tb4b4b4{
Te6edf3appFunctionsTb4b4b4.Te6edf3sendMessageTb4b4b4(Te6edf3contextTb4b4b4, Ta5d6ff"Ta5d6ffHelloTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffAlTa5d6ff"Tb4b4b4, Tff7b72nullTb4b4b4)
Tb4b4b4}
Te6edf3assertTrueTb4b4b4(Te6edf3exceptionTb4b4b4.Te6edf3messageTff7b72!!Tb4b4b4.Te6edf3containsTb4b4b4(Ta5d6ff"Ta5d6ffMultiple nodes match that nameTa5d6ff"Tb4b4b4)Tb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ffsendMessage_notConnectedTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Te6edf3everySuspend Tb4b4b4{ Te6edf3providerTb4b4b4.Te6edf3sendMessageTb4b4b4(Ta5d6ff"Ta5d6ffHelloTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffAliceTa5d6ff"Tb4b4b4, Tff7b72nullTb4b4b4) Tb4b4b4} Te6edf3returns
Te6edf3SendMessageResultTb4b4b4.Te6edf3NotConnectedTb4b4b4(Ta5d6ff"Ta5d6ffNot connectedTa5d6ff"Tb4b4b4)
Te6edf3assertFailsWithTff7b72<Te6edf3AppFunctionNotSupportedExceptionTff7b72> Tb4b4b4{ Te6edf3appFunctionsTb4b4b4.Te6edf3sendMessageTb4b4b4(Te6edf3contextTb4b4b4, Ta5d6ff"Ta5d6ffHelloTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffAliceTa5d6ff"Tb4b4b4, Tff7b72nullTb4b4b4) Tb4b4b4}
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ffgetMeshStatus_successTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Te6edf3everySuspend Tb4b4b4{ Te6edf3providerTb4b4b4.Te6edf3getMeshStatusTb4b4b4(Tb4b4b4) Tb4b4b4} Te6edf3returns
Te6edf3MeshStatusResultTb4b4b4(
Te6edf3connectionState Tff7b72= Ta5d6ff"Ta5d6ffCONNECTEDTa5d6ff"Tb4b4b4,
Te6edf3onlineNodeCount Tff7b72= T79c0ff5Tb4b4b4,
Te6edf3totalNodeCount Tff7b72= T79c0ff1T79c0ff0Tb4b4b4,
Te6edf3localBatteryLevel Tff7b72= T79c0ff8T79c0ff8Tb4b4b4,
Te6edf3localNodeName Tff7b72= Ta5d6ff"Ta5d6ffMyNodeTa5d6ff"Tb4b4b4,
Tb4b4b4)
Tff7b72val Te6edf3response Tff7b72= Te6edf3appFunctionsTb4b4b4.Te6edf3getMeshStatusTb4b4b4(Te6edf3contextTb4b4b4)
Te6edf3assertEqualsTb4b4b4(Ta5d6ff"Ta5d6ffCONNECTEDTa5d6ff"Tb4b4b4, Te6edf3responseTb4b4b4.Te6edf3connectionStateTb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff5Tb4b4b4, Te6edf3responseTb4b4b4.Te6edf3onlineNodeCountTb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff1T79c0ff0Tb4b4b4, Te6edf3responseTb4b4b4.Te6edf3totalNodeCountTb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff8T79c0ff8Tb4b4b4, Te6edf3responseTb4b4b4.Te6edf3localBatteryLevelTb4b4b4)
Te6edf3assertEqualsTb4b4b4(Ta5d6ff"Ta5d6ffMyNodeTa5d6ff"Tb4b4b4, Te6edf3responseTb4b4b4.Te6edf3localNodeNameTb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ffgetNodeList_successTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Tff7b72val Te6edf3nodes Tff7b72=
Te6edf3listOfTb4b4b4(
Te6edf3NodeSummaryTb4b4b4(Te6edf3id Tff7b72= Ta5d6ff"Ta5d6ff1Ta5d6ff"Tb4b4b4, Te6edf3name Tff7b72= Ta5d6ff"Ta5d6ffAliceTa5d6ff"Tb4b4b4, Te6edf3batteryLevel Tff7b72= T79c0ff9T79c0ff0Tb4b4b4, Te6edf3lastHeard Tff7b72= T79c0ff1T79c0ff7T79c0ff0T79c0ff0T79c0ff0T79c0ff0T79c0ff0T79c0ff0T79c0ff0T79c0ff0LTb4b4b4, Te6edf3isOnline Tff7b72= Tff7b72trueTb4b4b4)Tb4b4b4,
Te6edf3NodeSummaryTb4b4b4(Te6edf3id Tff7b72= Ta5d6ff"Ta5d6ff2Ta5d6ff"Tb4b4b4, Te6edf3name Tff7b72= Ta5d6ff"Ta5d6ffBobTa5d6ff"Tb4b4b4, Te6edf3batteryLevel Tff7b72= Tff7b72nullTb4b4b4, Te6edf3lastHeard Tff7b72= T79c0ff1T79c0ff6T79c0ff0T79c0ff0T79c0ff0T79c0ff0T79c0ff0T79c0ff0T79c0ff0T79c0ff0LTb4b4b4, Te6edf3isOnline Tff7b72= Tff7b72falseTb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3everySuspend Tb4b4b4{ Te6edf3providerTb4b4b4.Te6edf3getNodeListTb4b4b4(Tb4b4b4) Tb4b4b4} Te6edf3returns Te6edf3GetNodeListResultTb4b4b4.Te6edf3SuccessTb4b4b4(Te6edf3nodesTb4b4b4)
Tff7b72val Te6edf3response Tff7b72= Te6edf3appFunctionsTb4b4b4.Te6edf3getNodeListTb4b4b4(Te6edf3contextTb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff2Tb4b4b4, Te6edf3responseTb4b4b4.Te6edf3nodesTb4b4b4.Te6edf3sizeTb4b4b4)
Te6edf3assertEqualsTb4b4b4(Ta5d6ff"Ta5d6ff1Ta5d6ff"Tb4b4b4, Te6edf3responseTb4b4b4.Te6edf3nodesTff7b72[T79c0ff0Tff7b72]Tb4b4b4.Te6edf3idTb4b4b4)
Te6edf3assertEqualsTb4b4b4(Ta5d6ff"Ta5d6ffAliceTa5d6ff"Tb4b4b4, Te6edf3responseTb4b4b4.Te6edf3nodesTff7b72[T79c0ff0Tff7b72]Tb4b4b4.Te6edf3nameTb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff9T79c0ff0Tb4b4b4, Te6edf3responseTb4b4b4.Te6edf3nodesTff7b72[T79c0ff0Tff7b72]Tb4b4b4.Te6edf3batteryLevelTb4b4b4)
Te6edf3assertTrueTb4b4b4(Te6edf3responseTb4b4b4.Te6edf3nodesTff7b72[T79c0ff0Tff7b72]Tb4b4b4.Te6edf3isOnlineTb4b4b4)
Te6edf3assertEqualsTb4b4b4(Ta5d6ff"Ta5d6ffBobTa5d6ff"Tb4b4b4, Te6edf3responseTb4b4b4.Te6edf3nodesTff7b72[T79c0ff1Tff7b72]Tb4b4b4.Te6edf3nameTb4b4b4)
Te6edf3assertEqualsTb4b4b4(Tff7b72nullTb4b4b4, Te6edf3responseTb4b4b4.Te6edf3nodesTff7b72[T79c0ff1Tff7b72]Tb4b4b4.Te6edf3batteryLevelTb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ffgetChannelInfo_successTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Tff7b72val Te6edf3channels Tff7b72=
Te6edf3listOfTb4b4b4(
Te6edf3ChannelSummaryTb4b4b4(
Te6edf3index Tff7b72= T79c0ff0Tb4b4b4,
Te6edf3name Tff7b72= Ta5d6ff"Ta5d6ffPrimaryTa5d6ff"Tb4b4b4,
Te6edf3isPrimary Tff7b72= Tff7b72trueTb4b4b4,
Te6edf3uplinkEnabled Tff7b72= Tff7b72trueTb4b4b4,
Te6edf3downlinkEnabled Tff7b72= Tff7b72trueTb4b4b4,
Tb4b4b4)Tb4b4b4,
Te6edf3ChannelSummaryTb4b4b4(
Te6edf3index Tff7b72= T79c0ff1Tb4b4b4,
Te6edf3name Tff7b72= Ta5d6ff"Ta5d6ffSecondaryTa5d6ff"Tb4b4b4,
Te6edf3isPrimary Tff7b72= Tff7b72falseTb4b4b4,
Te6edf3uplinkEnabled Tff7b72= Tff7b72trueTb4b4b4,
Te6edf3downlinkEnabled Tff7b72= Tff7b72falseTb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3everySuspend Tb4b4b4{ Te6edf3providerTb4b4b4.Te6edf3getChannelInfoTb4b4b4(Tb4b4b4) Tb4b4b4} Te6edf3returns Te6edf3GetChannelInfoResultTb4b4b4.Te6edf3SuccessTb4b4b4(Te6edf3channelsTb4b4b4)
Tff7b72val Te6edf3response Tff7b72= Te6edf3appFunctionsTb4b4b4.Te6edf3getChannelInfoTb4b4b4(Te6edf3contextTb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff2Tb4b4b4, Te6edf3responseTb4b4b4.Te6edf3channelsTb4b4b4.Te6edf3sizeTb4b4b4)
Te6edf3assertEqualsTb4b4b4(Ta5d6ff"Ta5d6ffPrimaryTa5d6ff"Tb4b4b4, Te6edf3responseTb4b4b4.Te6edf3channelsTff7b72[T79c0ff0Tff7b72]Tb4b4b4.Te6edf3nameTb4b4b4)
Te6edf3assertTrueTb4b4b4(Te6edf3responseTb4b4b4.Te6edf3channelsTff7b72[T79c0ff0Tff7b72]Tb4b4b4.Te6edf3isPrimaryTb4b4b4)
Te6edf3assertTrueTb4b4b4(Te6edf3responseTb4b4b4.Te6edf3channelsTff7b72[T79c0ff0Tff7b72]Tb4b4b4.Te6edf3uplinkEnabledTb4b4b4)
Te6edf3assertEqualsTb4b4b4(Ta5d6ff"Ta5d6ffSecondaryTa5d6ff"Tb4b4b4, Te6edf3responseTb4b4b4.Te6edf3channelsTff7b72[T79c0ff1Tff7b72]Tb4b4b4.Te6edf3nameTb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ffgetDeviceStatus_successTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Tff7b72val Te6edf3device Tff7b72=
Te6edf3DeviceStatusTb4b4b4(
Te6edf3model Tff7b72= Ta5d6ff"Ta5d6ffT-BeamTa5d6ff"Tb4b4b4,
Te6edf3firmwareVersion Tff7b72= Ta5d6ff"Ta5d6ff2.3.15Ta5d6ff"Tb4b4b4,
Te6edf3batteryLevel Tff7b72= T79c0ff1T79c0ff0T79c0ff0Tb4b4b4,
Te6edf3chargingStatus Tff7b72= Ta5d6ff"Ta5d6ffNOT_CHARGINGTa5d6ff"Tb4b4b4,
Te6edf3deviceName Tff7b72= Ta5d6ff"Ta5d6ffMyDeviceTa5d6ff"Tb4b4b4,
Te6edf3isActive Tff7b72= Tff7b72trueTb4b4b4,
Tb4b4b4)
Te6edf3everySuspend Tb4b4b4{ Te6edf3providerTb4b4b4.Te6edf3getDeviceStatusTb4b4b4(Tb4b4b4) Tb4b4b4} Te6edf3returns Te6edf3GetDeviceStatusResultTb4b4b4.Te6edf3SuccessTb4b4b4(Te6edf3deviceTb4b4b4)
Tff7b72val Te6edf3response Tff7b72= Te6edf3appFunctionsTb4b4b4.Te6edf3getDeviceStatusTb4b4b4(Te6edf3contextTb4b4b4)
Te6edf3assertEqualsTb4b4b4(Ta5d6ff"Ta5d6ffT-BeamTa5d6ff"Tb4b4b4, Te6edf3responseTb4b4b4.Te6edf3modelTb4b4b4)
Te6edf3assertEqualsTb4b4b4(Ta5d6ff"Ta5d6ff2.3.15Ta5d6ff"Tb4b4b4, Te6edf3responseTb4b4b4.Te6edf3firmwareVersionTb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff1T79c0ff0T79c0ff0Tb4b4b4, Te6edf3responseTb4b4b4.Te6edf3batteryLevelTb4b4b4)
Te6edf3assertEqualsTb4b4b4(Ta5d6ff"Ta5d6ffNOT_CHARGINGTa5d6ff"Tb4b4b4, Te6edf3responseTb4b4b4.Te6edf3chargingStatusTb4b4b4)
Te6edf3assertEqualsTb4b4b4(Ta5d6ff"Ta5d6ffMyDeviceTa5d6ff"Tb4b4b4, Te6edf3responseTb4b4b4.Te6edf3deviceNameTb4b4b4)
Te6edf3assertTrueTb4b4b4(Te6edf3responseTb4b4b4.Te6edf3isActiveTb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ffgetNodeDetails_successTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Tff7b72val Te6edf3nodeDetails Tff7b72=
Te6edf3NodeDetailsTb4b4b4(
Te6edf3id Tff7b72= Ta5d6ff"Ta5d6ff!abc12345Ta5d6ff"Tb4b4b4,
Te6edf3userId Tff7b72= Ta5d6ff"Ta5d6ffabc12345Ta5d6ff"Tb4b4b4,
Te6edf3name Tff7b72= Ta5d6ff"Ta5d6ffTestNodeTa5d6ff"Tb4b4b4,
Te6edf3batteryLevel Tff7b72= T79c0ff7T79c0ff5Tb4b4b4,
Te6edf3voltage Tff7b72= T79c0ff3.9fTb4b4b4,
Te6edf3hardwareModel Tff7b72= Ta5d6ff"Ta5d6ffT-EchoTa5d6ff"Tb4b4b4,
Te6edf3firmwareVersion Tff7b72= Ta5d6ff"Ta5d6ff2.3.15Ta5d6ff"Tb4b4b4,
Te6edf3snr Tff7b72= T79c0ff5.5fTb4b4b4,
Te6edf3rssi Tff7b72= Tff7b72-T79c0ff9T79c0ff0Tb4b4b4,
Te6edf3hopsAway Tff7b72= T79c0ff1Tb4b4b4,
Te6edf3channel Tff7b72= T79c0ff0Tb4b4b4,
Te6edf3lastHeard Tff7b72= T79c0ff1T79c0ff7T79c0ff0T79c0ff0T79c0ff0T79c0ff0T79c0ff0T79c0ff0T79c0ff0T79c0ff0LTb4b4b4,
Te6edf3userRole Tff7b72= Ta5d6ff"Ta5d6ffCLIENTTa5d6ff"Tb4b4b4,
Te6edf3isLicensed Tff7b72= Tff7b72falseTb4b4b4,
Te6edf3latitude Tff7b72= T79c0ff4T79c0ff5.0Tb4b4b4,
Te6edf3longitude Tff7b72= Tff7b72-T79c0ff9T79c0ff0.0Tb4b4b4,
Tb4b4b4)
Te6edf3everySuspend Tb4b4b4{ Te6edf3providerTb4b4b4.Te6edf3getNodeDetailsTb4b4b4(Ta5d6ff"Ta5d6ff!abc12345Ta5d6ff"Tb4b4b4) Tb4b4b4} Te6edf3returns Te6edf3GetNodeDetailsResultTb4b4b4.Te6edf3SuccessTb4b4b4(Te6edf3nodeDetailsTb4b4b4)
Tff7b72val Te6edf3response Tff7b72= Te6edf3appFunctionsTb4b4b4.Te6edf3getNodeDetailsTb4b4b4(Te6edf3contextTb4b4b4, Ta5d6ff"Ta5d6ff!abc12345Ta5d6ff"Tb4b4b4)
Te6edf3assertEqualsTb4b4b4(Ta5d6ff"Ta5d6ff!abc12345Ta5d6ff"Tb4b4b4, Te6edf3responseTb4b4b4.Te6edf3idTb4b4b4)
Te6edf3assertEqualsTb4b4b4(Ta5d6ff"Ta5d6ffTestNodeTa5d6ff"Tb4b4b4, Te6edf3responseTb4b4b4.Te6edf3nameTb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff7T79c0ff5Tb4b4b4, Te6edf3responseTb4b4b4.Te6edf3batteryLevelTb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff3.9fTb4b4b4, Te6edf3responseTb4b4b4.Te6edf3voltageTb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff4T79c0ff5.0Tb4b4b4, Te6edf3responseTb4b4b4.Te6edf3latitudeTb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ffgetNodeDetails_notFoundTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Te6edf3everySuspend Tb4b4b4{ Te6edf3providerTb4b4b4.Te6edf3getNodeDetailsTb4b4b4(Ta5d6ff"Ta5d6ff!unknownTa5d6ff"Tb4b4b4) Tb4b4b4} Te6edf3returns Te6edf3GetNodeDetailsResultTb4b4b4.Te6edf3NotFoundTb4b4b4(Ta5d6ff"Ta5d6ffNode not foundTa5d6ff"Tb4b4b4)
Te6edf3assertFailsWithTff7b72<Te6edf3AppFunctionElementNotFoundExceptionTff7b72> Tb4b4b4{ Te6edf3appFunctionsTb4b4b4.Te6edf3getNodeDetailsTb4b4b4(Te6edf3contextTb4b4b4, Ta5d6ff"Ta5d6ff!unknownTa5d6ff"Tb4b4b4) Tb4b4b4}
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ffgetMeshMetrics_successTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Tff7b72val Te6edf3metrics Tff7b72=
Te6edf3MeshMetricsTb4b4b4(
Te6edf3totalNodeCount Tff7b72= T79c0ff1T79c0ff2Tb4b4b4,
Te6edf3onlineNodeCount Tff7b72= T79c0ff4Tb4b4b4,
Te6edf3averageBatteryLevel Tff7b72= T79c0ff8T79c0ff2Tb4b4b4,
Te6edf3meshHealthScore Tff7b72= T79c0ff9T79c0ff5Tb4b4b4,
Te6edf3mostRecentPacketTime Tff7b72= T79c0ff1T79c0ff7T79c0ff0T79c0ff0T79c0ff0T79c0ff0T79c0ff0T79c0ff0T79c0ff0T79c0ff0LTb4b4b4,
Te6edf3meshUptimeSeconds Tff7b72= T79c0ff3T79c0ff6T79c0ff0T79c0ff0LTb4b4b4,
Te6edf3channelUtilizationPercent Tff7b72= T79c0ff5Tb4b4b4,
Tb4b4b4)
Te6edf3everySuspend Tb4b4b4{ Te6edf3providerTb4b4b4.Te6edf3getMeshMetricsTb4b4b4(Tb4b4b4) Tb4b4b4} Te6edf3returns Te6edf3GetMeshMetricsResultTb4b4b4.Te6edf3SuccessTb4b4b4(Te6edf3metricsTb4b4b4)
Tff7b72val Te6edf3response Tff7b72= Te6edf3appFunctionsTb4b4b4.Te6edf3getMeshMetricsTb4b4b4(Te6edf3contextTb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff1T79c0ff2Tb4b4b4, Te6edf3responseTb4b4b4.Te6edf3totalNodeCountTb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff4Tb4b4b4, Te6edf3responseTb4b4b4.Te6edf3onlineNodeCountTb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff8T79c0ff2Tb4b4b4, Te6edf3responseTb4b4b4.Te6edf3averageBatteryLevelTb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff9T79c0ff5Tb4b4b4, Te6edf3responseTb4b4b4.Te6edf3meshHealthScoreTb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ffgetRecentMessages_successTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Tff7b72val Te6edf3messages Tff7b72=
Te6edf3listOfTb4b4b4(
Te6edf3MessageSummaryTb4b4b4(
Te6edf3senderName Tff7b72= Ta5d6ff"Ta5d6ffAliceTa5d6ff"Tb4b4b4,
Te6edf3text Tff7b72= Ta5d6ff"Ta5d6ffHiTa5d6ff"Tb4b4b4,
Te6edf3contactName Tff7b72= Ta5d6ff"Ta5d6ffAliceTa5d6ff"Tb4b4b4,
Te6edf3receivedTime Tff7b72= T79c0ff1T79c0ff7T79c0ff0T79c0ff0T79c0ff0T79c0ff0T79c0ff0T79c0ff0T79c0ff0T79c0ff0LTb4b4b4,
Te6edf3fromLocal Tff7b72= Tff7b72falseTb4b4b4,
Te6edf3read Tff7b72= Tff7b72trueTb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3everySuspend Tb4b4b4{ Te6edf3providerTb4b4b4.Te6edf3getRecentMessagesTb4b4b4(Tff7b72nullTb4b4b4, T79c0ff1T79c0ff0Tb4b4b4) Tb4b4b4} Te6edf3returns Te6edf3GetRecentMessagesResultTb4b4b4.Te6edf3SuccessTb4b4b4(Te6edf3messagesTb4b4b4)
Tff7b72val Te6edf3response Tff7b72= Te6edf3appFunctionsTb4b4b4.Te6edf3getRecentMessagesTb4b4b4(Te6edf3contextTb4b4b4, Tff7b72nullTb4b4b4, T79c0ff1T79c0ff0Tb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff1Tb4b4b4, Te6edf3responseTb4b4b4.Te6edf3messagesTb4b4b4.Te6edf3sizeTb4b4b4)
Te6edf3assertEqualsTb4b4b4(Ta5d6ff"Ta5d6ffAliceTa5d6ff"Tb4b4b4, Te6edf3responseTb4b4b4.Te6edf3messagesTff7b72[T79c0ff0Tff7b72]Tb4b4b4.Te6edf3senderNameTb4b4b4)
Te6edf3assertEqualsTb4b4b4(Ta5d6ff"Ta5d6ffHiTa5d6ff"Tb4b4b4, Te6edf3responseTb4b4b4.Te6edf3messagesTff7b72[T79c0ff0Tff7b72]Tb4b4b4.Te6edf3textTb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ffgetUnreadSummary_successTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Tff7b72val Te6edf3summary Tff7b72=
Te6edf3UnreadSummaryTb4b4b4(
Te6edf3totalUnreadCount Tff7b72= T79c0ff3Tb4b4b4,
Te6edf3contacts Tff7b72=
Te6edf3listOfTb4b4b4(
Te6edf3ContactUnreadTb4b4b4(
Te6edf3name Tff7b72= Ta5d6ff"Ta5d6ffAliceTa5d6ff"Tb4b4b4,
Te6edf3unreadCount Tff7b72= T79c0ff2Tb4b4b4,
Te6edf3lastMessagePreview Tff7b72= Ta5d6ff"Ta5d6ffHiTa5d6ff"Tb4b4b4,
Te6edf3lastMessageTime Tff7b72= T79c0ff1T79c0ff7T79c0ff0T79c0ff0T79c0ff0T79c0ff0T79c0ff0T79c0ff0T79c0ff0T79c0ff0LTb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3everySuspend Tb4b4b4{ Te6edf3providerTb4b4b4.Te6edf3getUnreadSummaryTb4b4b4(Tb4b4b4) Tb4b4b4} Te6edf3returns Te6edf3GetUnreadSummaryResultTb4b4b4.Te6edf3SuccessTb4b4b4(Te6edf3summaryTb4b4b4)
Tff7b72val Te6edf3response Tff7b72= Te6edf3appFunctionsTb4b4b4.Te6edf3getUnreadSummaryTb4b4b4(Te6edf3contextTb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff3Tb4b4b4, Te6edf3responseTb4b4b4.Te6edf3totalUnreadCountTb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff1Tb4b4b4, Te6edf3responseTb4b4b4.Te6edf3contactsTb4b4b4.Te6edf3sizeTb4b4b4)
Te6edf3assertEqualsTb4b4b4(Ta5d6ff"Ta5d6ffAliceTa5d6ff"Tb4b4b4, Te6edf3responseTb4b4b4.Te6edf3contactsTff7b72[T79c0ff0Tff7b72]Tb4b4b4.Te6edf3nameTb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff2Tb4b4b4, Te6edf3responseTb4b4b4.Te6edf3contactsTff7b72[T79c0ff0Tff7b72]Tb4b4b4.Te6edf3unreadCountTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Served by rngit 1.5.0 - Generated in 0.18s